﻿
namespace ShoppingCart.Business.Logic
{
	using System;
	using System.Collections.Generic;
	using ShoppingCart.Business.Entity;
	using ShoppingCart.DataAccess;
    using ShoppingCart.Business.Entity.Enums;

	/// <summary>
	/// Represents the Manager of Cuenta.
	/// </summary>
	[Serializable]
	public class CuentaManager : Singleton<CuentaManager>
	{
		#region Methods

		/// <summary>
		/// Selects a single record from the Cuenta table.
		/// </summary>
		public Cuenta Obtener(int idCuenta)
		{
			try
			{
				return CuentaData.Instancia.Obtener(idCuenta);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Selects all records from the Cuenta table by a foreign key.
		/// </summary>
		public IList<Cuenta> ListarPorIdBanco(int idBanco)
		{
			try
			{
				return CuentaData.Instancia.ListarPorIdBanco(idBanco);
			}
			catch (Exception) { throw; }
		}

        public Dictionary<byte, string> ListarTiposMoneda()
        {
            var monedas = new Dictionary<byte, string>();
            foreach (var moneda in Enum.GetValues(typeof(Moneda)))
            {
                monedas.Add((byte)moneda, Enum.GetName(typeof(Moneda), moneda));
            }
            return monedas;
        }

		/// <summary>
		/// Saves a record to the Cuenta table.
		/// </summary>
		public int Agregar(Cuenta cuenta)
		{
			try
			{
				return CuentaData.Instancia.Agregar(cuenta);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Updates a record in the Cuenta table.
		/// </summary>
		public bool Modificar(Cuenta cuenta)
		{
			try
			{
				return CuentaData.Instancia.Modificar(cuenta);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Deletes a record from the Cuenta table by its primary key.
		/// </summary>
		public bool Eliminar(int idCuenta)
		{
			try
			{
				return CuentaData.Instancia.Eliminar(idCuenta);
			}
			catch (Exception) { throw; }
		}

		/// <summary>
		/// Deletes a record from the Cuenta table by a foreign key.
		/// </summary>
		public void EliminarPorIdBanco(int idBanco)
		{
			try
			{
				CuentaData.Instancia.EliminarPorIdBanco(idBanco);
			}
			catch (Exception) { throw; }
		}

		#endregion
	}
}
